package classesBD;

import aplicacao.funcoes;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Pessoal
 */
public class Artigo extends Documento{
  private int idArtigo;
  private String cdRom;
  private MeioPublicacao meioPub;
  private String tituloLivro;
  
  @Override
  public int insere(boolean checaExistencia){
    if(super.titulo == null){
      funcoes.log("texto");
    }
    if (checaExistencia){
      idArtigo = existe(super.titulo);
    }
    if (idArtigo == 0){
        try {
            int doc = super.insere(true);
            String[] campos = new String[5];
            campos[0] = "default";
            campos[1] = cdRom;
            campos[2] = Integer.toString(doc);
            if(meioPub != null){
              campos[3] = Integer.toString(meioPub.insere(true));
            }
            campos[4] = tituloLivro;
            String query = funcoes.montaInsert("ARTIGO", campos);
            idArtigo = Conexao.executa(query, true);
            Conexao.fecha();
        } catch (SQLException ex) {
            Logger.getLogger(Artigo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
      return idArtigo;   
  }

  @Override
  public void buscaPorId(int id) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public void buscaPorNome(String nome) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public boolean preencheAttr(String attr, String valor) {
    String atributo = attr.toLowerCase();
    
    if((atributo.equalsIgnoreCase("booktitle")) && (valor.equalsIgnoreCase("ICEIS (2)"))){
      funcoes.boolToStr(true);
    }
    
    boolean result = true;
    switch(atributo){
      case "cdrom":cdRom = valor;
        break;
      case "journal":
      case "number":  
      case "volume":  result = preencheJournal(attr, valor);
        break;
      case "crossref": result = preencheCongresso(attr, valor);
        break;
      case "booktitle": tituloLivro = valor;
        break;  
      default: result = super.preencheAttr(attr, valor);
    }
    return result;
  }
  
  @Override
  public String existe(int id) {
    String query = "SELECT D.TITULO FROM ARTIGO A JOIN DOCUMENTO D ON A.IDDOCUMENTO=D.IDDOCUMENTO WHERE A.IDARTIGO=" + Integer.toString(id);
    String[][] retorno = Conexao.pesquisa(query, 1);
    if (retorno.length > 0){
      return retorno[0][0];
    }else{
      return "";
    }
  }

  @Override
  public int existe(String nome) {
    nome = nome.toLowerCase();
    String query = "SELECT A.IDARTIGO FROM ARTIGO A JOIN DOCUMENTO D ON A.IDDOCUMENTO=D.IDDOCUMENTO WHERE (D.TITULO)=" + funcoes.quotedStr(nome);
    String[][] retorno = Conexao.pesquisa(query, 1);
    if (retorno.length > 0){
      return Integer.parseInt(retorno[0][0]);
    }else{
      return 0;
    }
  }
  
  
  private boolean preencheJournal(String attr, String valor){
    if(meioPub == null){
      meioPub = new Journal();
    }  
    return meioPub.preencheAttr(attr, valor);
  }
  
  private boolean preencheCongresso(String attr, String valor){
    if(meioPub == null){
      meioPub = new Congresso();
    }  
    return meioPub.preencheAttr(attr, valor);
  }
  
  
  }
